package com.cskaoyan.javase.oop2._1extends._9override._3notice;

/**
 * 注意事项:
 *      1.注解@Override的作用是检测方法是否重写自父类
 *          这个注解非常重要
 *          要求,大家在重写方法时,一定要加上这个注解
 *          它的好处:
 *              a.标记方法重写,避免因错误的认知方法重写导致一些问题.
 *              b.增加代码可读性.一个方法头上存在该注解,说明该方法不是自身类定义的
 *                  而是重写自父类的
 *
 *     2.开发中重写父类方法,idea提供了很多种方式,这里推荐两种:
 *          1.alt + insert 选择override methods
 *              当不清楚要重写哪个方法,或者想要查看哪些方法能够重写时,用这个快捷键
 *          2.(更推荐)
 *              当你已经知道要重写父类哪个方法时
 *              你可以在子类中,直接写要重写方法的方法名,然后根据提示回车即可
 *
 *     思考: Java的类中方法有很多,是不是所有父类的方法,都可以重写呢?
 *          1.private方法
 *              私有方法虽然可以继承,但是子类并没有访问权限
 *              所以私有方法是不能重写的
 *              扩展:
 *              实际上所有子类没有权限的父类方法,子类都是无法重写的
 *
 *          2.static方法
 *              静态成员属于类
 *              它们不考虑继承,也不是继承
 *              如果子类没有父类静态方法,那就共用父类的
 *              反之,就各用各的
 *          方法的重写也是不可以的
 *
 *          3.构造方法,不能继承,更不能重写.
 *
 *
 * @since 15:46
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    void test() {
    }

    protected void test2() {
    }

    public static void main(String[] args) {
        Father.testStatic();
        Son.testStatic();
    }
}

class Father {
    private void method() {
    }

    public static void testStatic() {
        System.out.println("Father");
    }

    void test() {
    }

    void test2() {
    }
}

class Son extends Father {

    // @Override
    public static void testStatic() {
        System.out.println("Son");
    }

    @Override
    void test() {
        super.test();
    }

    @Override
    void test2() {
        super.test2();
    }

    // @Override
    // void test(int a) {
    // }
}